//
//  linklist.h
//  线性表链式存储设计与实现
//
//  Created by ZJ on 2018/7/13.
//  Copyright © 2018年 iCatch Technology Inc. All rights reserved.
//

#ifndef linklist_h
#define linklist_h

#include <stdio.h>

typedef void LinkList;

typedef struct _tag_LinkListNode {
    struct _tag_LinkListNode* next;
}LinkListNode;

/**
 创建一个线性表

 @return 线性表的首地址
 */
LinkList* LinkList_Create(void);

/**
 销毁线性表

 @param list 线性表的首地址
 */
void LinkList_Destroy(LinkList* list);

/**
 清空线性表

 @param list 线性表的首地址
 */
void LinkList_Clear(LinkList* list);

/**
 求线性表的长度

 @param list 线性表的首地址
 @return 线性表长度
 */
int LinkList_Length(LinkList* list);

/**
 向线性表的pos位置插入一个元素

 @param list 线性表的首地址
 @param node 元素（节点）
 @param pos 位置
 @return 插入是否成功，0表示成功，非0失败
 */
int LinkList_Insert(LinkList* list, LinkListNode* node, int pos);

/**
 获取线性表pos的元素

 @param list 线性表的首地址
 @param pos 给定位置
 @return 给定位置的元素
 */
LinkListNode* LinkList_Get(LinkList* list, int pos);

/**
 删除指定位置的元素

 @param list 线性表的首地址
 @param pos 给定位置
 @return 给定位置的元素
 */
LinkListNode* LinkList_Delete(LinkList* list, int pos);

#endif /* linklist_h */
